package 力扣91;

/**
 * @ClassName : _1381_设计一个支持增量操作的栈
 * @Author : 骆发茂
 * @Date: 2021/12/14 10:45
 * @Description : https://leetcode-cn.com/problems/design-a-stack-with-increment-operation/
 //https://leetcode-cn.com/problems/design-a-stack-with-increment-operation/solution/she-ji-yi-ge-zhi-chi-zeng-liang-cao-zuo-de-zhan-by/
 */
public class Day3_1381_设计一个支持增量操作的栈_lc题解_数组方法 {
    class CustomStack {
        int[] stack;
        int top;

        public CustomStack(int maxSize) {
            stack = new int[maxSize];//数组size
            top = -1;//初始化为-1，之后添加一个就刚好从0开始了
        }

        //添加
        public void push(int x) {
            if(stack.length-1!=top){
                top++;
                stack[top] = x;
            }

        }

        //取出
        public int pop() {
            if(top ==-1){
                return -1;
            }
            top--;
            return stack[top + 1];

        }

        public void increment(int k, int val) {
            //top+1 ==数量length
            //不同于lc官方题解的方法二：模拟优化
            //这里是要把数组内容都加上val（math.min情况下）
            //方法二：模拟优化，是把累加至 add[top - 1] 处，
            // 最后少了一个，所以才
            // int limit = Math.min(k - 1索引, top索引);
            int limit = Math.min(k, top + 1);//k和数组里面的数比较，取小的
            //数-1 = 引
            //索引+1 = 长度
            for (int i = 0; i < limit; i++) {
                stack[i] += val;
            }

        }
    }
}